/**
 * Copyright (c) 2018-2099, Chill Zhuang 庄骞 (bladejava@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springblade.modules.desk.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.modules.desk.entity.Notice;
import org.springblade.modules.desk.mapper.NoticeMapper;
import org.springblade.modules.desk.service.INoticeService;
import org.springblade.modules.desk.vo.NoticeUserModel;
import org.springblade.modules.desk.vo.NoticeVO;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 服务实现类
 *
 * @author Chill
 */
@Service
public class NoticeServiceImpl extends BaseServiceImpl<NoticeMapper, Notice> implements INoticeService {

	@Override
	public IPage<NoticeVO> selectNoticePage(IPage<NoticeVO> page, NoticeVO notice, Long userId, boolean isAdmin) {
		return page.setRecords(baseMapper.selectNoticePage(page, notice, userId, isAdmin));
	}

	@Override
	public List<NoticeUserModel> updateReadUsers(Long userId, String name, Notice detail) {
		List<NoticeUserModel> readUsers = detail.getReadUsers();
		if (readUsers == null) {
			readUsers = new ArrayList<>();
			readUsers.add(new NoticeUserModel(userId, name));
		} else {
			// 判断当前用户已存在
			boolean isExist = false;
			for (NoticeUserModel readUser : readUsers) {
				if (readUser.getId().equals(userId)) {
					isExist = true;
					break;
				}
			}
			if (!isExist) {
				// 判断
				readUsers.add(new NoticeUserModel(userId, name));
			}
		}
		// 更新已读用户
		detail.setReadUsers(readUsers);
		updateById(detail);
		return readUsers;
	}

}
